const jwt = require('jsonwebtoken');
const User = require('../models/user');

const verifyToken = async (req, res, next) => {
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];
    if (token == null) {
        return res.status(401).json({
            status: 1,
            message: '未提供令牌'
        });
    }

    try {
        const userId = jwt.verify(token, process.env.JWT_SECRET)._id;

        // 从数据库中查找用户
        const user = await User.findById(userId);

        if (!user) {
            return res.status(404).json({
                status: 1,
                message: '该用户不存在'
            });
        }

        // 检查用户是否在线
        if (!user.isOnline) {
            return res.status(403).json({
                status: 1,
                message: '用户状态异常：离线'
            });
        }
        req.user = user; // 将用户信息附加到请求对象中
        next();
    } catch (err) {
        return res.status(500).json({
            status: 1,
            message: '服务端错误，请联系管理员'
        });
    }
};

module.exports = verifyToken;
